home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / asmutil / hdsource.zip / HDSURF.ASM < prev    next >
Assembly Source File  |  1986-02-24  |  13KB  |  357 lines

  1.      PAGE     64,132            ;PAGE WIDTH,LENGTH
  2.      .SALL
  3.      TITLE     PC/AT DIAGNOSTIC - SURFACE ANALYSIS
  4. ; **********************************************************************
  5. ; *                                       *
  6. ; *    MODULE NAME    HDSURF                           *
  7. ; *    AUTHOR           JIM BRACKING                       *
  8. ; *                                       *
  9. ; *    DECSRIPTION    THIS PROGRAM PERFORMS THE FOLLOWING           *
  10. ; *               FUNCTIONS:                       *
  11. ; *                                       *
  12. ; *               1.  THIS PROGRAM WILL WRITE A DATA PATTERN      *
  13. ; *               OF REPEATING X'6DB6' ON EVERY SECTOR        *
  14. ; *               AND THEN READ IT BACK AND COMPARE IT.       *
  15. ; *               FOR ANY SECTOR WITH A MISS-MATCH THE        *
  16. ; *               ENTIRE TRACK WILL BE MARKED BAD.           *
  17. ; *                                       *
  18. ; **********************************************************************
  19. ;
  20. ; **********************************************************************
  21. ; *            EXTERNAL PROGRAM REFERENCES               *
  22. ; **********************************************************************
  23.      EXTRN     SCRMGR:NEAR
  24. ; **********************************************************************
  25. ; *              EXTERNAL DATA REFERENCES               *
  26. ; **********************************************************************
  27.      INCLUDE HDDATA.ASM
  28. ; **********************************************************************
  29. ; *            EXTERNAL SUBROUTINE REFERENCES               *
  30. ; **********************************************************************
  31.      INCLUDE HDSUB.ASM
  32. ; **********************************************************************
  33. ; *                PUBLIC DECLARES                   *
  34. ; **********************************************************************
  35.      PUBLIC  HDSURF
  36. ; **********************************************************************
  37. ; *                 MACROS                    *
  38. ; **********************************************************************
  39.      IF1
  40.      INCLUDE HD.MAC
  41.      INCLUDE \SCRMGR\SCRNWORK.MAC
  42.      ENDIF
  43. ; **********************************************************************
  44. ; *                                       *
  45. ; *                   BEGIN                       *
  46. ; *                                       *
  47. ; **********************************************************************
  48. CSEG     SEGMENT PARA PUBLIC 'CODE'
  49.      ASSUME CS:CSEG
  50. HDSURF PROC    NEAR
  51.      ASSUME  DS:CSEG           ;DATA SEGMENT
  52.      JMP     BY_ID               ;JMP AROUND ID
  53.      ID     HDSURF
  54.      INCLUDE \SCRMGR\SCRNWORK.ASM
  55. ; **********************************************************************
  56. ; *             EQUATES AND STRUCTURES                *
  57. ; **********************************************************************
  58.      INCLUDE HDEQU.ASM
  59. ; **********************************************************************
  60. ; *                 SCREENS                   *
  61. ; **********************************************************************
  62.   SFIELD FM0,FM1,,@LABEL,RV+BLINK,14,34,' WARNING '
  63.   SFIELD FM1,FM2,,@LABEL,LO,15,18,'THIS WILL DESTROY ALL DATA ON THE HARD DISK'
  64.   SFIELD FM2,FM3,,@LABEL,LO,16,22,'REPLY Y TO CONTINUE OR N TO STOP -'
  65.   SFIELD FM3,FM0,,@YN+@UC+@NFULL+@REQ,LO,16,57,' '
  66.   SFIELD T05,T05,,@LABEL,RV,17,31,'SURFACE ANALYSIS'
  67. ;
  68.   SFIELD X00,X01,,@LABEL,RV,23,02,'CTRL-F1 TO START'
  69.   SFIELD X01,X02,,@LABEL,RV,23,29,'ESC FOR THE MAIN MENU'
  70.   SFIELD X02,X00,,@LABEL,RV,23,62,'CTRL-BRK TO STOP'
  71. ;
  72.   SFIELD XI0,XI1,,@LABEL,LO,19,05,'DRIVE =>'
  73.   SFIELD XI1,XI2,1,@EX+@NUM+@UC+@NFULL+@REQ,LO,19,14
  74.   SFIELD XI2,XI3,,@LABEL,LO,20,05,'(1 OR 2)'
  75.   SFIELD XI3,XI4,,@LABEL,LO,19,22,'INTERLEAVE =>'
  76.   SFIELD XI4,XI5,1,@EX+@NUM+@NFULL+@REQ,LO,19,36
  77.   SFIELD XI5,XI0,,@LABEL,LO,20,26,'(1-8)'
  78. ;
  79.   SFIELD XS0,XS1,,@LABEL,LO,19,46,'STATUS =>'
  80.   SFIELD XS1,XS0,,@LABEL,LO,19,56,'** IDLE **   '
  81. ;
  82.   SFIELD XS2,XS3,,@LABEL,LO,19,46,'STATUS =>'
  83.   SFIELD XS3,XS2,,@LABEL,HI,19,56,'** WORKING **'
  84. ;
  85.   SFIELD XC0,XC1,,@LABEL,LO,20,46,'CYLINDER =>'
  86.   SFIELD XC1,XC0,04,@LABEL,LO,20,58
  87. ;
  88.   SFIELD XE0,XE1,,@LABEL,LO,21,46,'ERRORS =>'
  89.   SFIELD XE1,XE0,04,@LABEL,LO,21,56
  90. ;
  91.   SFIELD E01,E02,,@LABEL,LO,16,02,'  CYL XXXX HEAD XX HAS BEEN FLAGGED'
  92.   SFIELD E02,E03,04,@LABEL,LO,16,08
  93.   SFIELD E03,E01,02,@LABEL,LO,16,18
  94. ;
  95. BY_ID:
  96. HDSURF ENDP
  97. ; *********************************************************************
  98. ; *                                      *
  99. ; *                SURFACE ANALYSIS                  *
  100. ; *                                      *
  101. ; *********************************************************************
  102. SURFA       PROC
  103.      CLS     LO,4,1,23,78           ;CLEAR THE SCREEN
  104.      BOX     17,0,08,80,LO           ;OUTLINE
  105.      WRITEC  0CCH,LO,17,0,1        ;  THE
  106.      WRITEC  0B9H,LO,17,79,1       ;  SCREEN
  107.      WRITE     T05               ;TYPE OF TEST
  108.      WRITE     X00               ;COMMANDS
  109. SURFA_00:
  110.      WRITE     XS0               ;STATUS
  111.      LEA     BX,XI1            ;DRIVE ENTRY
  112.      MOV     [BX].S_ATTR,LO        ;RESTORE ATTRIBUTE
  113.      MOV     [BX].S_DATA,' '       ;CLEAR DRIVE
  114.      LEA     BX,XI4            ;INTERLEAVE ENTRY
  115.      MOV     [BX].S_ATTR,LO        ;RESTORE ATTRIBUTE
  116.      MOV     [BX].S_DATA,'3'       ;DEFAULT INTERLEAVE OF 3 (AT)
  117.      CMP     PCT,00H           ;IBM/AT??
  118.      JE     SURFA_01           ;YES
  119.      MOV     [BX].S_DATA,'6'       ;DEFAULT INTERLEAVE OF 6 (PC)
  120. SURFA_01:
  121.      WRITE     XI0               ;DRIVE + INTERLEAVE
  122. SURFA_02:
  123.      READR     BX               ;FETCH DRIVE AND INTERLEAVE
  124.      CALL     TRANS_KEY           ;TRANSLATE THE KEY
  125.      JNC     SURFA_04           ;SUCESSFULL
  126. SURFA_03:
  127.      CALL     BEEP               ;RING THE BELL
  128.      JMP     SURFA_02           ;TRY AGAIN
  129. SURFA_04:
  130.      CMP     AL,ESC_KEY           ;ESCAPE KEY??
  131.      JNE     SURFA_05           ;NO
  132.      JMP     EXIT               ;RETURN
  133. SURFA_05:
  134.      CMP     AL,C_BRK           ;CONTROL BREAK KEY??
  135.      JNE     SURFA_07           ;NO
  136.      JMP     SURFA               ;YES - START OVER
  137. SURFA_07:
  138.      CMP     AL,C_F1           ;CTRL_F1??
  139.      JNE     SURFA_03           ;NO - INVALID KEY
  140.      LEA     BX,XI1            ;DRIVE ENTRY
  141.      MOV     [BX].S_ATTR,LO        ;RESTORE ATTRIBUTE
  142.      MOV     AL,[BX].S_DATA        ;FETCH DRIVE NUMBER
  143.      CMP     AL,'1'                ;VALID DRIVE??
  144.      JE     SURFA_08           ;YES
  145.      CMP     AL,'2'                ;VALID DRIVE??
  146.      JE     SURFA_08           ;YES
  147.      MOV     [BX].S_ATTR,HI        ;HIGHLIGHT IT
  148.      PMSG     22               ;DISPLAY THE MESSAGE
  149.      CALL     BEEP               ;RING THE BELL
  150.      WRITE     XI0               ;DRIVE + INTERLEAVE
  151.      JMP     SURFA_02           ;TRY AGAIN
  152. SURFA_08:
  153.      AND     AL,0FH            ;ADJUST
  154.      DEC     AL               ;  DRIVE NUMBER
  155.      CMP     AL,NUM_DR           ;DRIVE INSTALLED
  156.      jb     SURFA_10           ;YES
  157.      MOV     [BX].S_ATTR,HI        ;HIGHLIGHT IT
  158.      PMSG     21               ;DISPLAY THE MESSAGE
  159.      CALL     BEEP               ;RING THE BELL
  160.      WRITE     XI0               ;DRIVE + INTERLEAVE
  161.      JMP     SURFA_02           ;TRY AGAIN
  162. SURFA_10:
  163.      MOV     DR,AL               ;SAVE DRIVE NUMBER
  164.      LEA     BX,XI4            ;INTERLEAVE ENTRY
  165.      MOV     [BX].S_ATTR,LO        ;RESTORE ATTRIBUTE
  166.      MOV     AL,[BX].S_DATA        ;FETCH INTERLEAVE
  167.      CMP     AL,'1'                ;IN RANGE??
  168.      JB     SURFA_15           ;NO
  169.      CMP     AL,'8'                ;IN RANGE??
  170.      JA     SURFA_15           ;NO
  171.      JMP     SURFA_20           ;CONTINUE
  172. SURFA_15:
  173.      MOV     [BX].S_ATTR,HI        ;HIGHLIGHT IT
  174.      PMSG     23               ;DISPLAY THE MESSAGE
  175.      CALL     BEEP               ;RING THE BELL
  176.      WRITE     XI2               ;DRIVE + INTERLEAVE
  177.      JMP     SURFA_02           ;TRY AGAIN
  178. SURFA_20:
  179.      XOR     AH,AH               ;CLEAR AH
  180.      AND     AL,0FH            ;MAKE IT A DIGIT
  181.      DEC     AL               ;RELEATIVE TO ZERO
  182.      XOR     DX,DX               ;CLEAR DX
  183.      MOV     CX,17               ;SECTORS PER TRACK
  184.      MUL     CX
  185.      LEA     SI,INL_TBL           ;INTERLEAVE TABLE
  186.      ADD     SI,AX               ;TABLE INDEX
  187.      XOR     AX,AX               ;PAD CHARACTER
  188.      MOV     CX,512            ;BUFFER SIZE
  189.      CLD                   ;FORWARD DIRECTION
  190.      LEA     DI,FMT_BUFF           ;FORMAT BUFFER
  191.      PUSH     DS               ;ESTABLISH
  192.      POP     ES               ;  SEGMENT
  193.      REP     STOSB               ;ZERO THE BUFFER
  194.      MOV     CX,17               ;NUMBER OF SECTORS
  195.      LEA     DI,FMT_BUFF           ;FORMAT BUFFER
  196. SURFA_30:
  197.      LODSB                   ;FETCH SECTOR NUMBER
  198.      MOV     AH,80H            ;BAD SECTOR INDICATOR
  199.      XCHG     AL,AH               ;ADJUST FOR STOSW
  200.      STOSW                   ;SET SECTOR NUMBER
  201.      LOOP     SURFA_30           ;COMPLETE THE BUFFER
  202. SURFA_35:
  203.      LEA     BX,XI1            ;DRIVE ENTRY
  204.      MOV     [BX].S_ATTR,LO        ;RESTORE ATTRIBUTE
  205.      LEA     BX,XI4            ;INTERLEAVE ENTRY
  206.      MOV     [BX].S_ATTR,LO        ;RESTORE ATTRIBUTE
  207.      WRITE     XI0               ;DRIVE + INTERLEAVE
  208.      LEA     BX,FM3            ;REPLY ENTRY
  209.      MOV     [BX].S_DATA,' '       ;CLEAR REPLY
  210.      CLS     LO,4,2,16,78           ;CLEAR THE SCREEN
  211.      WRITE     FM0               ;DISPLAY MESSAGE
  212.      READ     FM0               ;GET REPLY